{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0",
   "metadata": {},
   "source": [
    "[![image](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/gee-community/geemap/blob/master/docs/workshops/Japan_2022.ipynb)\n",
    "[![image](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/gee-community/geemap/master?urlpath=lab%2Ftree%2Fexamples%2Fworkshops)\n",
    "\n",
    "**Introduction to Earth Engine and Geemap**\n",
    "\n",
    "A workshop at Nagoya University, Japan.\n",
    "\n",
    "Useful links\n",
    "\n",
    "-   [Google Earth Engine](https://earthengine.google.com/)\n",
    "-   [Sign up for an Earth Engine account](https://earthengine.google.com/signup/)\n",
    "-   [Awesome GEE Community Datasets](https://samapriya.github.io/awesome-gee-community-datasets)\n",
    "-   [Geemap website](https://geemap.org/)\n",
    "-   [Geemap book](https://book.geemap.org/)\n",
    "-   [Geemap YouTube videos](https://youtube.com/@giswqs)\n",
    "-   [Streamlit Web App](https://github.com/giswqs/streamlit-geospatial)\n",
    "\n",
    "## Installing geemap\n",
    "\n",
    "Press **Ctrl + /** to uncomment the following line to install geemap. Restart the kernel/runtime after installation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip install geemap"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2",
   "metadata": {},
   "source": [
    "## Earth Engine authentication"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import ee\n",
    "\n",
    "ee.Authenticate()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4",
   "metadata": {},
   "source": [
    "Following the instructions [here](https://book.geemap.org/chapters/01_introduction.html#earth-engine-authentication) to authenticate your Earth Engine account.\n",
    "\n",
    "## Creating interactive maps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import geemap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4, height=600)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(data_ctrl=False, toolbar_ctrl=False, draw_ctrl=False)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(lite_mode=True)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "11",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.save(\"ipyleaflet.html\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12",
   "metadata": {},
   "source": [
    "## Adding basemaps\n",
    "\n",
    "### Built-in basemaps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "13",
   "metadata": {},
   "outputs": [],
   "source": [
    "import geemap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "14",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(basemap=\"HYBRID\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "15",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_basemap(\"OpenTopoMap\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "16",
   "metadata": {},
   "outputs": [],
   "source": [
    "for basemap in geemap.basemaps.keys():\n",
    "    print(basemap)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "17",
   "metadata": {},
   "outputs": [],
   "source": [
    "len(geemap.basemaps)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18",
   "metadata": {},
   "source": [
    "### Basemap GUI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "19",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20",
   "metadata": {},
   "source": [
    "## Earth Engine data types\n",
    "\n",
    "### Image\n",
    "\n",
    "#### Loading Earth Engine images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21",
   "metadata": {},
   "outputs": [],
   "source": [
    "image = ee.Image(\"USGS/SRTMGL1_003\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22",
   "metadata": {},
   "source": [
    "#### Visualizing Earth Engine images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "23",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[21.79, 70.87], zoom=3)\n",
    "image = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 6000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(image, vis_params, \"SRTM\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24",
   "metadata": {},
   "source": [
    "### ImageCollection\n",
    "\n",
    "#### Loading image collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "25",
   "metadata": {},
   "outputs": [],
   "source": [
    "collection = ee.ImageCollection(\"COPERNICUS/S2_SR\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26",
   "metadata": {},
   "source": [
    "#### Visualizing image collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "27",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "collection = ee.ImageCollection(\"COPERNICUS/S2_SR\")\n",
    "image = collection.median()\n",
    "\n",
    "vis = {\n",
    "    \"min\": 0.0,\n",
    "    \"max\": 3000,\n",
    "    \"bands\": [\"B4\", \"B3\", \"B2\"],\n",
    "}\n",
    "\n",
    "Map.setCenter(83.277, 17.7009, 12)\n",
    "Map.addLayer(image, vis, \"Sentinel-2\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28",
   "metadata": {},
   "source": [
    "#### Filtering image collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "29",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "collection = (\n",
    "    ee.ImageCollection(\"COPERNICUS/S2_SR\")\n",
    "    .filterDate(\"2021-01-01\", \"2022-01-01\")\n",
    "    .filter(ee.Filter.lt(\"CLOUDY_PIXEL_PERCENTAGE\", 5))\n",
    ")\n",
    "image = collection.median()\n",
    "\n",
    "vis = {\n",
    "    \"min\": 0.0,\n",
    "    \"max\": 3000,\n",
    "    \"bands\": [\"B4\", \"B3\", \"B2\"],\n",
    "}\n",
    "\n",
    "Map.setCenter(83.277, 17.7009, 12)\n",
    "Map.addLayer(image, vis, \"Sentinel-2\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30",
   "metadata": {},
   "source": [
    "### Geometry\n",
    "\n",
    "#### Geometry types\n",
    "\n",
    "#### Creating Geometry objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "31",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "point = ee.Geometry.Point([1.5, 1.5])\n",
    "\n",
    "lineString = ee.Geometry.LineString([[-35, -10], [35, -10], [35, 10], [-35, 10]])\n",
    "\n",
    "linearRing = ee.Geometry.LinearRing(\n",
    "    [[-35, -10], [35, -10], [35, 10], [-35, 10], [-35, -10]]\n",
    ")\n",
    "\n",
    "rectangle = ee.Geometry.Rectangle([-40, -20, 40, 20])\n",
    "\n",
    "polygon = ee.Geometry.Polygon([[[-5, 40], [65, 40], [65, 60], [-5, 60], [-5, 60]]])\n",
    "\n",
    "Map.addLayer(point, {}, \"Point\")\n",
    "Map.addLayer(lineString, {}, \"LineString\")\n",
    "Map.addLayer(linearRing, {}, \"LinearRing\")\n",
    "Map.addLayer(rectangle, {}, \"Rectangle\")\n",
    "Map.addLayer(polygon, {}, \"Polygon\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "32",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "point = ee.Geometry.Point([1.5, 1.5])\n",
    "\n",
    "lineString = ee.Geometry.LineString(\n",
    "    [[-35, -10], [35, -10], [35, 10], [-35, 10]], None, False\n",
    ")\n",
    "\n",
    "linearRing = ee.Geometry.LinearRing(\n",
    "    [[-35, -10], [35, -10], [35, 10], [-35, 10], [-35, -10]], None, False\n",
    ")\n",
    "\n",
    "rectangle = ee.Geometry.Rectangle([-40, -20, 40, 20], None, False)\n",
    "\n",
    "polygon = ee.Geometry.Polygon(\n",
    "    [[[-5, 40], [65, 40], [65, 60], [-5, 60], [-5, 60]]], None, False\n",
    ")\n",
    "\n",
    "Map.addLayer(point, {}, \"Point\")\n",
    "Map.addLayer(lineString, {}, \"LineString\")\n",
    "Map.addLayer(linearRing, {}, \"LinearRing\")\n",
    "Map.addLayer(rectangle, {}, \"Rectangle\")\n",
    "Map.addLayer(polygon, {}, \"Polygon\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "33",
   "metadata": {},
   "source": [
    "#### Using drawing tools"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "34",
   "metadata": {},
   "outputs": [],
   "source": [
    "if Map.user_roi is not None:\n",
    "    print(Map.user_roi.getInfo())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35",
   "metadata": {},
   "source": [
    "### Feature\n",
    "\n",
    "#### Creating Feature objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "36",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create an ee.Geometry.\n",
    "polygon = ee.Geometry.Polygon(\n",
    "    [[[-35, -10], [35, -10], [35, 10], [-35, 10], [-35, -10]]], None, False\n",
    ")\n",
    "\n",
    "# Create a Feature from the Geometry.\n",
    "polyFeature = ee.Feature(polygon, {\"foo\": 42, \"bar\": \"tart\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "37",
   "metadata": {},
   "outputs": [],
   "source": [
    "polyFeature.getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "38",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "Map.addLayer(polyFeature, {}, \"feature\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a dictionary of properties, some of which may be computed values.\n",
    "props = {\"foo\": ee.Number(8).add(88), \"bar\": \"nihao\"}\n",
    "\n",
    "# Create a None geometry feature with the dictionary of properties.\n",
    "nowhereFeature = ee.Feature(None, props)\n",
    "\n",
    "nowhereFeature.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40",
   "metadata": {},
   "source": [
    "#### Setting Feature properties"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "41",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Make a feature and set some properties.\n",
    "feature = (\n",
    "    ee.Feature(ee.Geometry.Point([-122.22599, 37.17605]))\n",
    "    .set(\"genus\", \"Sequoia\")\n",
    "    .set(\"species\", \"sempervirens\")\n",
    ")\n",
    "\n",
    "# Overwrite the old properties with a new dictionary.\n",
    "newDict = {\"genus\": \"Brachyramphus\", \"presence\": 1, \"species\": \"marmoratus\"}\n",
    "feature = feature.set(newDict)\n",
    "\n",
    "# Check the result.\n",
    "feature.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42",
   "metadata": {},
   "source": [
    "#### Getting Feature properties"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "43",
   "metadata": {},
   "outputs": [],
   "source": [
    "prop = feature.get(\"species\")\n",
    "prop.getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "44",
   "metadata": {},
   "outputs": [],
   "source": [
    "props = feature.toDictionary()\n",
    "props.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45",
   "metadata": {},
   "source": [
    "### FeatureCollection\n",
    "\n",
    "#### Loading feature collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "46",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "fc = ee.FeatureCollection(\"TIGER/2016/Roads\")\n",
    "Map.setCenter(-73.9596, 40.7688, 12)\n",
    "Map.addLayer(fc, {}, \"Census roads\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47",
   "metadata": {},
   "source": [
    "#### Creating feature collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "48",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Make a list of Features.\n",
    "features = [\n",
    "    ee.Feature(ee.Geometry.Rectangle(30.01, 59.80, 30.59, 60.15), {\"name\": \"Voronoi\"}),\n",
    "    ee.Feature(ee.Geometry.Point(-73.96, 40.781), {\"name\": \"Thiessen\"}),\n",
    "    ee.Feature(ee.Geometry.Point(6.4806, 50.8012), {\"name\": \"Dirichlet\"}),\n",
    "]\n",
    "\n",
    "# Create a FeatureCollection from the list and print it.\n",
    "fromList = ee.FeatureCollection(features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "49",
   "metadata": {},
   "outputs": [],
   "source": [
    "fromList.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50",
   "metadata": {},
   "source": [
    "#### Filtering feature collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "51",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "feat = states.filter(ee.Filter.eq(\"NAME\", \"Texas\"))\n",
    "Map.addLayer(feat, {}, \"Texas\")\n",
    "Map.centerObject(feat)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "52",
   "metadata": {},
   "outputs": [],
   "source": [
    "texas = feat.first()\n",
    "texas.toDictionary().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "53",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "fc = states.filter(ee.Filter.inList(\"NAME\", [\"California\", \"Oregon\", \"Washington\"]))\n",
    "Map.addLayer(fc, {}, \"West Coast\")\n",
    "Map.centerObject(fc)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "54",
   "metadata": {},
   "outputs": [],
   "source": [
    "region = Map.user_roi\n",
    "if region is None:\n",
    "    region = ee.Geometry.BBox(-88.40, 29.88, -77.90, 35.39)\n",
    "\n",
    "fc = ee.FeatureCollection(\"TIGER/2018/States\").filterBounds(region)\n",
    "Map.addLayer(fc, {}, \"Southeastern U.S.\")\n",
    "Map.centerObject(fc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55",
   "metadata": {},
   "source": [
    "#### Visualizing feature collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "56",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "Map.addLayer(states, {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "57",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "image = ee.Image().paint(states, 0, 3)\n",
    "Map.addLayer(image, {\"palette\": \"red\"}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "58",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "style = {\"color\": \"0000ffff\", \"width\": 2, \"lineType\": \"solid\", \"fillColor\": \"FF000080\"}\n",
    "Map.addLayer(states.style(**style), {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "59",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "vis_params = {\n",
    "    \"color\": \"000000\",\n",
    "    \"colorOpacity\": 1,\n",
    "    \"pointSize\": 3,\n",
    "    \"pointShape\": \"circle\",\n",
    "    \"width\": 2,\n",
    "    \"lineType\": \"solid\",\n",
    "    \"fillColorOpacity\": 0.66,\n",
    "}\n",
    "palette = [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"]\n",
    "Map.add_styled_vector(\n",
    "    states, column=\"NAME\", palette=palette, layer_name=\"Styled vector\", **vis_params\n",
    ")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60",
   "metadata": {},
   "source": [
    "#### Styling by attribute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "61",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[28.00142, -81.7424], zoom=13)\n",
    "Map.add_basemap(\"HYBRID\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "62",
   "metadata": {},
   "outputs": [],
   "source": [
    "types = [\n",
    "    \"Freshwater Forested/Shrub Wetland\",\n",
    "    \"Freshwater Emergent Wetland\",\n",
    "    \"Freshwater Pond\",\n",
    "    \"Estuarine and Marine Wetland\",\n",
    "    \"Riverine\",\n",
    "    \"Lake\",\n",
    "    \"Estuarine and Marine Deepwater\",\n",
    "    \"Other\",\n",
    "]\n",
    "\n",
    "colors = [\n",
    "    \"#008837\",\n",
    "    \"#7FC31C\",\n",
    "    \"#688CC0\",\n",
    "    \"#66C2A5\",\n",
    "    \"#0190BF\",\n",
    "    \"#13007C\",\n",
    "    \"#007C88\",\n",
    "    \"#B28653\",\n",
    "]\n",
    "\n",
    "fillColor = [c + \"A8\" for c in colors]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63",
   "metadata": {},
   "outputs": [],
   "source": [
    "fc = ee.FeatureCollection(\"projects/sat-io/open-datasets/NWI/wetlands/FL_Wetlands\")\n",
    "styled_fc = geemap.ee_vector_style(\n",
    "    fc, column=\"WETLAND_TY\", labels=types, fillColor=fillColor, color=\"00000000\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "64",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.addLayer(styled_fc, {}, \"NWI\")\n",
    "Map.add_legend(title=\"Wetland Type\", labels=types, colors=colors)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "65",
   "metadata": {},
   "outputs": [],
   "source": [
    "fuels = [\n",
    "    \"Coal\",\n",
    "    \"Oil\",\n",
    "    \"Gas\",\n",
    "    \"Hydro\",\n",
    "    \"Nuclear\",\n",
    "    \"Solar\",\n",
    "    \"Waste\",\n",
    "    \"Wind\",\n",
    "    \"Geothermal\",\n",
    "    \"Biomass\",\n",
    "]\n",
    "colors = [\n",
    "    \"000000\",\n",
    "    \"593704\",\n",
    "    \"BC80BD\",\n",
    "    \"0565A6\",\n",
    "    \"E31A1C\",\n",
    "    \"FF7F00\",\n",
    "    \"6A3D9A\",\n",
    "    \"5CA2D1\",\n",
    "    \"FDBF6F\",\n",
    "    \"229A00\",\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "66",
   "metadata": {},
   "outputs": [],
   "source": [
    "fc = ee.FeatureCollection(\"WRI/GPPD/power_plants\").filter(\n",
    "    ee.Filter.inList(\"fuel1\", fuels)\n",
    ")\n",
    "styled_fc = geemap.ee_vector_style(fc, column=\"fuel1\", labels=fuels, color=colors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "67",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "Map.addLayer(styled_fc, {}, \"Power Plants\")\n",
    "Map.add_legend(title=\"Power Plant Fuel Type\", labels=fuels, colors=colors)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "68",
   "metadata": {},
   "outputs": [],
   "source": [
    "types = [\"I\", \"U\", \"S\", \"M\", \"C\", \"O\"]\n",
    "labels = [\"Interstate\", \"U.S.\", \"State recognized\", \"Common Name\", \"County\", \"Other\"]\n",
    "colors = [\"E31A1C\", \"FF7F00\", \"6A3D9A\", \"000000\", \"FDBF6F\", \"229A00\"]\n",
    "width = [8, 5, 4, 2, 1, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69",
   "metadata": {},
   "outputs": [],
   "source": [
    "fc = ee.FeatureCollection(\"TIGER/2016/Roads\")\n",
    "styled_fc = geemap.ee_vector_style(\n",
    "    fc, column=\"rttyp\", labels=types, color=colors, width=width\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "70",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40.7424, -73.9724], zoom=13)\n",
    "Map.addLayer(styled_fc, {}, \"Census Roads\")\n",
    "Map.add_legend(title=\"Route Type\", labels=labels, colors=colors)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71",
   "metadata": {},
   "source": [
    "## Earth Engine Data Catalog\n",
    "\n",
    "### Searching for datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "72",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset_xyz = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "Map.addLayer(dataset_xyz, {}, \"USGS/SRTMGL1_003\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "73",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74",
   "metadata": {},
   "source": [
    "### Using the datasets module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "75",
   "metadata": {},
   "outputs": [],
   "source": [
    "from geemap.datasets import DATA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "76",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "dataset = ee.Image(DATA.USGS_GAP_CONUS_2011)\n",
    "Map.addLayer(dataset, {}, \"GAP CONUS\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "77",
   "metadata": {},
   "outputs": [],
   "source": [
    "from geemap.datasets import get_metadata\n",
    "\n",
    "get_metadata(DATA.USGS_GAP_CONUS_2011)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78",
   "metadata": {},
   "source": [
    "## Getting image metadata"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "79",
   "metadata": {},
   "outputs": [],
   "source": [
    "image = ee.Image(\"LANDSAT/LC09/C02/T1_L2/LC09_044034_20220503\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "80",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.bandNames().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.select(\"SR_B1\").projection().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "82",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.select(\"SR_B1\").projection().nominalScale().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.propertyNames().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "84",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.get(\"CLOUD_COVER\").getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.get(\"DATE_ACQUIRED\").getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "86",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.get(\"system:time_start\").getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "87",
   "metadata": {},
   "outputs": [],
   "source": [
    "date = ee.Date(image.get(\"system:time_start\"))\n",
    "date.format(\"YYYY-MM-dd\").getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "88",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.toDictionary().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "89",
   "metadata": {},
   "outputs": [],
   "source": [
    "props = geemap.image_props(image)\n",
    "props.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90",
   "metadata": {},
   "source": [
    "## Calculating descriptive statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "91",
   "metadata": {},
   "outputs": [],
   "source": [
    "image = ee.Image(\"LANDSAT/LC09/C02/T1_L2/LC09_044034_20220503\")\n",
    "geemap.image_min_value(image).getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "92",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.image_max_value(image).getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "93",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.image_mean_value(image).getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.image_stats(image).getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95",
   "metadata": {},
   "source": [
    "## Using the inspector tool"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "96",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create an interactive map\n",
    "Map = geemap.Map(center=(40, -100), zoom=4)\n",
    "\n",
    "# Add Earth Engine datasets\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "landsat7 = ee.Image(\"LANDSAT/LE7_TOA_5YEAR/1999_2003\").select(\n",
    "    [\"B1\", \"B2\", \"B3\", \"B4\", \"B5\", \"B7\"]\n",
    ")\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "\n",
    "# Set visualization parameters.\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "\n",
    "# Add Earth Engine layers to the map\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\")\n",
    "Map.addLayer(\n",
    "    landsat7,\n",
    "    {\"bands\": [\"B4\", \"B3\", \"B2\"], \"min\": 20, \"max\": 200, \"gamma\": 2.0},\n",
    "    \"Landsat 7\",\n",
    ")\n",
    "Map.addLayer(states, {}, \"US States\")\n",
    "\n",
    "# Display the map\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "97",
   "metadata": {},
   "source": [
    "## Using the plotting tool"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "98",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "\n",
    "landsat7 = ee.Image(\"LANDSAT/LE7_TOA_5YEAR/1999_2003\").select(\n",
    "    [\"B1\", \"B2\", \"B3\", \"B4\", \"B5\", \"B7\"]\n",
    ")\n",
    "\n",
    "landsat_vis = {\"bands\": [\"B4\", \"B3\", \"B2\"], \"gamma\": 1.4}\n",
    "Map.addLayer(landsat7, landsat_vis, \"Landsat\")\n",
    "\n",
    "hyperion = ee.ImageCollection(\"EO1/HYPERION\").filter(\n",
    "    ee.Filter.date(\"2016-01-01\", \"2017-03-01\")\n",
    ")\n",
    "\n",
    "hyperion_vis = {\n",
    "    \"min\": 1000.0,\n",
    "    \"max\": 14000.0,\n",
    "    \"gamma\": 2.5,\n",
    "}\n",
    "Map.addLayer(hyperion, hyperion_vis, \"Hyperion\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "99",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.set_plot_options(add_marker_cluster=True, overlay=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "100",
   "metadata": {},
   "source": [
    "## Changing layer opacity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "101",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=(40, -100), zoom=4)\n",
    "\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\", True, 1)\n",
    "Map.addLayer(states, {}, \"US States\", True)\n",
    "\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "102",
   "metadata": {},
   "source": [
    "## Visualizing raster data\n",
    "\n",
    "### Single-band images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "103",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[12, 69], zoom=3)\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "104",
   "metadata": {},
   "outputs": [],
   "source": [
    "vis_params = {\n",
    "    \"bands\": [\"elevation\"],\n",
    "    \"palette\": [\"333399\", \" 00b2b2\", \" 99eb85\", \" ccbe7d\", \" 997c76\", \" ffffff\"],\n",
    "    \"min\": 0.0,\n",
    "    \"max\": 6000.0,\n",
    "    \"opacity\": 1.0,\n",
    "    \"gamma\": 1.0,\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "105",
   "metadata": {},
   "source": [
    "### Multi-band images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "106",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "landsat7 = ee.Image(\"LANDSAT/LE7_TOA_5YEAR/1999_2003\")\n",
    "vis_params = {\n",
    "    \"min\": 20,\n",
    "    \"max\": 200,\n",
    "    \"gamma\": 2,\n",
    "    \"bands\": [\"B4\", \"B3\", \"B2\"],\n",
    "}\n",
    "Map.addLayer(landsat7, vis_params, \"Landsat 7\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "107",
   "metadata": {},
   "source": [
    "## Visualizing vector data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "108",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "Map.addLayer(states, {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "109",
   "metadata": {},
   "outputs": [],
   "source": [
    "vis_params = {\n",
    "    \"color\": \"ff0000ff\",\n",
    "    \"width\": 2,\n",
    "    \"lineType\": \"solid\",\n",
    "    \"fillColor\": \"00000000\",\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "110",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "Map.addLayer(states.style(**vis_params), {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "111",
   "metadata": {},
   "source": [
    "## Creating legends\n",
    "\n",
    "### Built-in legends"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "112",
   "metadata": {},
   "outputs": [],
   "source": [
    "legends = geemap.builtin_legends\n",
    "for legend in legends:\n",
    "    print(legend)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "113",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_legend(builtin_legend=\"NLCD\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "114",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "Map.add_basemap(\"HYBRID\")\n",
    "\n",
    "nlcd = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\")\n",
    "landcover = nlcd.select(\"landcover\")\n",
    "\n",
    "Map.addLayer(landcover, {}, \"NLCD Land Cover 2019\")\n",
    "Map.add_legend(\n",
    "    title=\"NLCD Land Cover Classification\", builtin_legend=\"NLCD\", height=\"465px\"\n",
    ")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "115",
   "metadata": {},
   "source": [
    "### Custom legends"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "116",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(add_google_map=False)\n",
    "\n",
    "labels = [\"One\", \"Two\", \"Three\", \"Four\", \"etc\"]\n",
    "\n",
    "# colors can be defined using either hex code or RGB (0-255, 0-255, 0-255)\n",
    "colors = [\"#8DD3C7\", \"#FFFFB3\", \"#BEBADA\", \"#FB8072\", \"#80B1D3\"]\n",
    "# legend_colors = [(255, 0, 0), (127, 255, 0), (127, 18, 25), (36, 70, 180), (96, 68 123)]\n",
    "\n",
    "Map.add_legend(labels=labels, colors=colors, position=\"bottomright\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "117",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "\n",
    "legend_dict = {\n",
    "    \"11 Open Water\": \"466b9f\",\n",
    "    \"12 Perennial Ice/Snow\": \"d1def8\",\n",
    "    \"21 Developed, Open Space\": \"dec5c5\",\n",
    "    \"22 Developed, Low Intensity\": \"d99282\",\n",
    "    \"23 Developed, Medium Intensity\": \"eb0000\",\n",
    "    \"24 Developed High Intensity\": \"ab0000\",\n",
    "    \"31 Barren Land (Rock/Sand/Clay)\": \"b3ac9f\",\n",
    "    \"41 Deciduous Forest\": \"68ab5f\",\n",
    "    \"42 Evergreen Forest\": \"1c5f2c\",\n",
    "    \"43 Mixed Forest\": \"b5c58f\",\n",
    "    \"51 Dwarf Scrub\": \"af963c\",\n",
    "    \"52 Shrub/Scrub\": \"ccb879\",\n",
    "    \"71 Grassland/Herbaceous\": \"dfdfc2\",\n",
    "    \"72 Sedge/Herbaceous\": \"d1d182\",\n",
    "    \"73 Lichens\": \"a3cc51\",\n",
    "    \"74 Moss\": \"82ba9e\",\n",
    "    \"81 Pasture/Hay\": \"dcd939\",\n",
    "    \"82 Cultivated Crops\": \"ab6c28\",\n",
    "    \"90 Woody Wetlands\": \"b8d9eb\",\n",
    "    \"95 Emergent Herbaceous Wetlands\": \"6c9fb8\",\n",
    "}\n",
    "\n",
    "nlcd = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\")\n",
    "landcover = nlcd.select(\"landcover\")\n",
    "\n",
    "Map.addLayer(landcover, {}, \"NLCD Land Cover 2019\")\n",
    "Map.add_legend(title=\"NLCD Land Cover Classification\", legend_dict=legend_dict)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "118",
   "metadata": {},
   "source": [
    "## Creating color bars"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "119",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "120",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_colorbar(vis_params, label=\"Elevation (m)\", layer_name=\"SRTM DEM\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "121",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_colorbar(\n",
    "    vis_params, label=\"Elevation (m)\", layer_name=\"SRTM DEM\", orientation=\"vertical\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "122",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_colorbar(\n",
    "    vis_params,\n",
    "    label=\"Elevation (m)\",\n",
    "    layer_name=\"SRTM DEM\",\n",
    "    orientation=\"vertical\",\n",
    "    transparent_bg=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "123",
   "metadata": {},
   "source": [
    "## Displaying labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "124",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4, add_google_map=False)\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "style = {\"color\": \"black\", \"fillColor\": \"00000000\"}\n",
    "Map.addLayer(states.style(**style), {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "125",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_labels(\n",
    "    data=states,\n",
    "    column=\"STUSPS\",\n",
    "    font_size=\"12pt\",\n",
    "    font_color=\"blue\",\n",
    "    font_family=\"arial\",\n",
    "    font_weight=\"bold\",\n",
    "    draggable=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "126",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.remove_labels()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "127",
   "metadata": {},
   "outputs": [],
   "source": [
    "centroids = geemap.vector_centroids(states)\n",
    "df = geemap.ee_to_df(centroids)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "128",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.add_labels(\n",
    "    data=df,\n",
    "    column=\"STUSPS\",\n",
    "    font_size=\"12pt\",\n",
    "    font_color=\"blue\",\n",
    "    font_family=\"arial\",\n",
    "    font_weight=\"bold\",\n",
    "    x=\"longitude\",\n",
    "    y=\"latitude\",\n",
    ")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "129",
   "metadata": {},
   "source": [
    "## Split-panel maps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "130",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "Map.split_map(left_layer=\"HYBRID\", right_layer=\"TERRAIN\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "131",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=(40, -100), zoom=4, height=600)\n",
    "\n",
    "nlcd_2001 = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2001\").select(\"landcover\")\n",
    "nlcd_2019 = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\").select(\"landcover\")\n",
    "\n",
    "left_layer = geemap.ee_tile_layer(nlcd_2001, {}, \"NLCD 2001\")\n",
    "right_layer = geemap.ee_tile_layer(nlcd_2019, {}, \"NLCD 2019\")\n",
    "\n",
    "Map.split_map(left_layer, right_layer)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "132",
   "metadata": {},
   "source": [
    "## Linked maps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "133",
   "metadata": {},
   "outputs": [],
   "source": [
    "image = (\n",
    "    ee.ImageCollection(\"COPERNICUS/S2\")\n",
    "    .filterDate(\"2018-09-01\", \"2018-09-30\")\n",
    "    .map(lambda img: img.divide(10000))\n",
    "    .median()\n",
    ")\n",
    "\n",
    "vis_params = [\n",
    "    {\"bands\": [\"B4\", \"B3\", \"B2\"], \"min\": 0, \"max\": 0.3, \"gamma\": 1.3},\n",
    "    {\"bands\": [\"B8\", \"B11\", \"B4\"], \"min\": 0, \"max\": 0.3, \"gamma\": 1.3},\n",
    "    {\"bands\": [\"B8\", \"B4\", \"B3\"], \"min\": 0, \"max\": 0.3, \"gamma\": 1.3},\n",
    "    {\"bands\": [\"B12\", \"B12\", \"B4\"], \"min\": 0, \"max\": 0.3, \"gamma\": 1.3},\n",
    "]\n",
    "\n",
    "labels = [\n",
    "    \"Natural Color (B4/B3/B2)\",\n",
    "    \"Land/Water (B8/B11/B4)\",\n",
    "    \"Color Infrared (B8/B4/B3)\",\n",
    "    \"Vegetation (B12/B11/B4)\",\n",
    "]\n",
    "\n",
    "geemap.linked_maps(\n",
    "    rows=2,\n",
    "    cols=2,\n",
    "    height=\"300px\",\n",
    "    center=[38.4151, 21.2712],\n",
    "    zoom=12,\n",
    "    ee_objects=[image],\n",
    "    vis_params=vis_params,\n",
    "    labels=labels,\n",
    "    label_position=\"topright\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "134",
   "metadata": {},
   "source": [
    "## Timeseries inspector\n",
    "\n",
    "### Visualizing image collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "135",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "collection = ee.ImageCollection(\"USGS/NLCD_RELEASES/2019_REL/NLCD\").select(\"landcover\")\n",
    "vis_params = {\"bands\": [\"landcover\"]}\n",
    "years = collection.aggregate_array(\"system:index\").getInfo()\n",
    "years"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "136",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.ts_inspector(\n",
    "    left_ts=collection,\n",
    "    right_ts=collection,\n",
    "    left_names=years,\n",
    "    right_names=years,\n",
    "    left_vis=vis_params,\n",
    "    right_vis=vis_params,\n",
    "    width=\"80px\",\n",
    ")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "137",
   "metadata": {},
   "source": [
    "## Time slider\n",
    "\n",
    "### Visualizing vegetation data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "138",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "collection = (\n",
    "    ee.ImageCollection(\"MODIS/MCD43A4_006_NDVI\")\n",
    "    .filter(ee.Filter.date(\"2018-06-01\", \"2018-07-01\"))\n",
    "    .select(\"NDVI\")\n",
    ")\n",
    "vis_params = {\n",
    "    \"min\": 0.0,\n",
    "    \"max\": 1.0,\n",
    "    \"palette\": [\n",
    "        \"FFFFFF\",\n",
    "        \"CE7E45\",\n",
    "        \"DF923D\",\n",
    "        \"F1B555\",\n",
    "        \"FCD163\",\n",
    "        \"99B718\",\n",
    "        \"74A901\",\n",
    "        \"66A000\",\n",
    "        \"529400\",\n",
    "        \"3E8601\",\n",
    "        \"207401\",\n",
    "        \"056201\",\n",
    "        \"004C00\",\n",
    "        \"023B01\",\n",
    "        \"012E01\",\n",
    "        \"011D01\",\n",
    "        \"011301\",\n",
    "    ],\n",
    "}\n",
    "\n",
    "Map.add_time_slider(collection, vis_params, time_interval=2)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "139",
   "metadata": {},
   "source": [
    "### Visualizing weather data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "140",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "collection = (\n",
    "    ee.ImageCollection(\"NOAA/GFS0P25\")\n",
    "    .filterDate(\"2018-12-22\", \"2018-12-23\")\n",
    "    .limit(24)\n",
    "    .select(\"temperature_2m_above_ground\")\n",
    ")\n",
    "\n",
    "vis_params = {\n",
    "    \"min\": -40.0,\n",
    "    \"max\": 35.0,\n",
    "    \"palette\": [\"blue\", \"purple\", \"cyan\", \"green\", \"yellow\", \"red\"],\n",
    "}\n",
    "\n",
    "labels = [str(n).zfill(2) + \":00\" for n in range(0, 24)]\n",
    "Map.add_time_slider(collection, vis_params, labels=labels, time_interval=1, opacity=0.8)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "141",
   "metadata": {},
   "source": [
    "### Visualizing Sentinel-2 imagery"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "142",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[37.75, -122.45], zoom=12)\n",
    "\n",
    "collection = (\n",
    "    ee.ImageCollection(\"COPERNICUS/S2_SR\")\n",
    "    .filterBounds(ee.Geometry.Point([-122.45, 37.75]))\n",
    "    .filterMetadata(\"CLOUDY_PIXEL_PERCENTAGE\", \"less_than\", 10)\n",
    ")\n",
    "\n",
    "vis_params = {\"min\": 0, \"max\": 4000, \"bands\": [\"B8\", \"B4\", \"B3\"]}\n",
    "\n",
    "Map.add_time_slider(collection, vis_params)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "143",
   "metadata": {},
   "source": [
    "## Shaded relief maps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "144",
   "metadata": {},
   "outputs": [],
   "source": [
    "import geemap.colormaps as cm\n",
    "\n",
    "Map = geemap.Map()\n",
    "\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "hillshade = ee.Terrain.hillshade(dem)\n",
    "\n",
    "vis = {\"min\": 0, \"max\": 6000, \"palette\": cm.palettes.terrain}\n",
    "blend = geemap.blend(top_layer=dem, top_vis=vis)\n",
    "\n",
    "Map.addLayer(hillshade, {}, \"Hillshade\")\n",
    "Map.addLayer(blend, {}, \"Shaded relief\")\n",
    "\n",
    "Map.add_colorbar(vis, label=\"Elevation (m)\")\n",
    "Map.setCenter(91.4206, 27.3225, zoom=9)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "145",
   "metadata": {},
   "outputs": [],
   "source": [
    "left_layer = geemap.ee_tile_layer(blend, {}, \"Shaded relief\")\n",
    "right_layer = geemap.ee_tile_layer(hillshade, {}, \"Hillshade\")\n",
    "Map.split_map(left_layer, right_layer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "146",
   "metadata": {},
   "outputs": [],
   "source": [
    "nlcd = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\").select(\"landcover\")\n",
    "nlcd_vis = {\"bands\": [\"landcover\"]}\n",
    "blend = geemap.blend(nlcd, dem, top_vis=nlcd_vis, expression=\"a*b\")\n",
    "Map.addLayer(blend, {}, \"Blend NLCD\")\n",
    "Map.add_legend(builtin_legend=\"NLCD\", title=\"NLCD Land Cover\")\n",
    "Map.setCenter(-118.1310, 35.6816, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "147",
   "metadata": {},
   "source": [
    "## Elevation contours"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "148",
   "metadata": {},
   "outputs": [],
   "source": [
    "import geemap.colormaps as cm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "149",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "image = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "hillshade = ee.Terrain.hillshade(image)\n",
    "Map.addLayer(hillshade, {}, \"Hillshade\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "150",
   "metadata": {},
   "outputs": [],
   "source": [
    "vis_params = {\"min\": 0, \"max\": 5000, \"palette\": cm.palettes.dem}\n",
    "Map.addLayer(image, vis_params, \"dem\", True, 0.5)\n",
    "Map.add_colorbar(vis_params, label=\"Elevation (m)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "151",
   "metadata": {},
   "outputs": [],
   "source": [
    "contours = geemap.create_contours(image, 0, 5000, 100, region=None)\n",
    "Map.addLayer(contours, {\"palette\": \"black\"}, \"contours\")\n",
    "Map.setCenter(-119.3678, 37.1671, 12)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "152",
   "metadata": {},
   "source": [
    "## Image descriptive statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "153",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "centroid = ee.Geometry.Point([-122.4439, 37.7538])\n",
    "image = ee.ImageCollection(\"LANDSAT/LC08/C01/T1_SR\").filterBounds(centroid).first()\n",
    "vis = {\"min\": 0, \"max\": 3000, \"bands\": [\"B5\", \"B4\", \"B3\"]}\n",
    "\n",
    "Map.centerObject(centroid, 8)\n",
    "Map.addLayer(image, vis, \"Landsat-8\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "154",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.propertyNames().getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "155",
   "metadata": {},
   "outputs": [],
   "source": [
    "image.get(\"CLOUD_COVER\").getInfo()  # 0.05"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "156",
   "metadata": {},
   "outputs": [],
   "source": [
    "props = geemap.image_props(image)\n",
    "props.getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "157",
   "metadata": {},
   "outputs": [],
   "source": [
    "stats = geemap.image_stats(image, scale=30)\n",
    "stats.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "158",
   "metadata": {},
   "source": [
    "## Zonal statistics with Earth Engine\n",
    "\n",
    "### Zonal statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "159",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "\n",
    "# Add NASA SRTM\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "dem_vis = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(dem, dem_vis, \"SRTM DEM\")\n",
    "\n",
    "# Add 5-year Landsat TOA composite\n",
    "landsat = ee.Image(\"LANDSAT/LE7_TOA_5YEAR/1999_2003\")\n",
    "landsat_vis = {\"bands\": [\"B4\", \"B3\", \"B2\"], \"gamma\": 1.4}\n",
    "Map.addLayer(landsat, landsat_vis, \"Landsat\", False)\n",
    "\n",
    "# Add US Census States\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "style = {\"fillColor\": \"00000000\"}\n",
    "Map.addLayer(states.style(**style), {}, \"US States\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "160",
   "metadata": {},
   "outputs": [],
   "source": [
    "out_dem_stats = \"dem_stats.csv\"\n",
    "geemap.zonal_stats(\n",
    "    dem, states, out_dem_stats, stat_type=\"MEAN\", scale=1000, return_fc=False\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "161",
   "metadata": {},
   "outputs": [],
   "source": [
    "out_landsat_stats = \"landsat_stats.csv\"\n",
    "geemap.zonal_stats(\n",
    "    landsat,\n",
    "    states,\n",
    "    out_landsat_stats,\n",
    "    stat_type=\"MEAN\",\n",
    "    scale=1000,\n",
    "    return_fc=False,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "162",
   "metadata": {},
   "source": [
    "### Zonal statistics by group"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "163",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "\n",
    "# Add NLCD data\n",
    "dataset = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\")\n",
    "landcover = dataset.select(\"landcover\")\n",
    "Map.addLayer(landcover, {}, \"NLCD 2019\")\n",
    "\n",
    "# Add US census states\n",
    "states = ee.FeatureCollection(\"TIGER/2018/States\")\n",
    "style = {\"fillColor\": \"00000000\"}\n",
    "Map.addLayer(states.style(**style), {}, \"US States\")\n",
    "\n",
    "# Add NLCD legend\n",
    "Map.add_legend(title=\"NLCD Land Cover\", builtin_legend=\"NLCD\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "164",
   "metadata": {},
   "outputs": [],
   "source": [
    "nlcd_stats = \"nlcd_stats.csv\"\n",
    "\n",
    "geemap.zonal_stats_by_group(\n",
    "    landcover,\n",
    "    states,\n",
    "    nlcd_stats,\n",
    "    stat_type=\"SUM\",\n",
    "    denominator=1e6,\n",
    "    decimal_places=2,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "165",
   "metadata": {},
   "outputs": [],
   "source": [
    "nlcd_stats = \"nlcd_stats_pct.csv\"\n",
    "\n",
    "geemap.zonal_stats_by_group(\n",
    "    landcover,\n",
    "    states,\n",
    "    nlcd_stats,\n",
    "    stat_type=\"PERCENTAGE\",\n",
    "    denominator=1e6,\n",
    "    decimal_places=2,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "166",
   "metadata": {},
   "source": [
    "### Zonal statistics with two images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "167",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "dem = ee.Image(\"USGS/3DEP/10m\")\n",
    "vis = {\"min\": 0, \"max\": 4000, \"palette\": \"terrain\"}\n",
    "Map.addLayer(dem, vis, \"DEM\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "168",
   "metadata": {},
   "outputs": [],
   "source": [
    "landcover = ee.Image(\"USGS/NLCD_RELEASES/2019_REL/NLCD/2019\").select(\"landcover\")\n",
    "Map.addLayer(landcover, {}, \"NLCD 2019\")\n",
    "Map.add_legend(title=\"NLCD Land Cover Classification\", builtin_legend=\"NLCD\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "169",
   "metadata": {},
   "outputs": [],
   "source": [
    "stats = geemap.image_stats_by_zone(dem, landcover, reducer=\"MEAN\")\n",
    "stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "170",
   "metadata": {},
   "outputs": [],
   "source": [
    "stats.to_csv(\"mean.csv\", index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "171",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.image_stats_by_zone(dem, landcover, out_csv=\"std.csv\", reducer=\"STD\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "172",
   "metadata": {},
   "source": [
    "## Extracting pixel values\n",
    "\n",
    "### Extracting values to points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "173",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "\n",
    "dem = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "landsat7 = ee.Image(\"LANDSAT/LE7_TOA_5YEAR/1999_2003\")\n",
    "\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "\n",
    "Map.addLayer(\n",
    "    landsat7,\n",
    "    {\"bands\": [\"B4\", \"B3\", \"B2\"], \"min\": 20, \"max\": 200, \"gamma\": 2},\n",
    "    \"Landsat 7\",\n",
    ")\n",
    "Map.addLayer(dem, vis_params, \"SRTM DEM\", True, 1)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "174",
   "metadata": {},
   "outputs": [],
   "source": [
    "in_shp = \"us_cities.shp\"\n",
    "url = \"https://github.com/giswqs/data/raw/main/us/us_cities.zip\"\n",
    "geemap.download_file(url)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "175",
   "metadata": {},
   "outputs": [],
   "source": [
    "in_fc = geemap.shp_to_ee(in_shp)\n",
    "Map.addLayer(in_fc, {}, \"Cities\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "176",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.extract_values_to_points(in_fc, dem, out_fc=\"dem.shp\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "177",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.shp_to_gdf(\"dem.shp\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "178",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.extract_values_to_points(in_fc, landsat7, \"landsat.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "179",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.csv_to_df(\"landsat.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "180",
   "metadata": {},
   "source": [
    "### Extracting pixel values along a transect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "181",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map(center=[40, -100], zoom=4)\n",
    "Map.add_basemap(\"TERRAIN\")\n",
    "\n",
    "image = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(image, vis_params, \"SRTM DEM\", True, 0.5)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "182",
   "metadata": {},
   "outputs": [],
   "source": [
    "line = Map.user_roi\n",
    "if line is None:\n",
    "    line = ee.Geometry.LineString(\n",
    "        [[-120.2232, 36.3148], [-118.9269, 36.7121], [-117.2022, 36.7562]]\n",
    "    )\n",
    "    Map.addLayer(line, {}, \"ROI\")\n",
    "Map.centerObject(line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "183",
   "metadata": {},
   "outputs": [],
   "source": [
    "reducer = \"mean\"\n",
    "transect = geemap.extract_transect(\n",
    "    image, line, n_segments=100, reducer=reducer, to_pandas=True\n",
    ")\n",
    "transect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "184",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.line_chart(\n",
    "    data=transect,\n",
    "    x=\"distance\",\n",
    "    y=\"mean\",\n",
    "    markers=True,\n",
    "    x_label=\"Distance (m)\",\n",
    "    y_label=\"Elevation (m)\",\n",
    "    height=400,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "185",
   "metadata": {},
   "outputs": [],
   "source": [
    "transect.to_csv(\"transect.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "186",
   "metadata": {},
   "source": [
    "### Interactive region reduction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "187",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "collection = (\n",
    "    ee.ImageCollection(\"MODIS/061/MOD13A2\")\n",
    "    .filterDate(\"2015-01-01\", \"2019-12-31\")\n",
    "    .select(\"NDVI\")\n",
    ")\n",
    "\n",
    "image = collection.toBands()\n",
    "\n",
    "ndvi_vis = {\n",
    "    \"min\": 0.0,\n",
    "    \"max\": 9000.0,\n",
    "    \"palette\": \"ndvi\",\n",
    "}\n",
    "\n",
    "Map.addLayer(image, {}, \"MODIS NDVI Time-series\")\n",
    "Map.addLayer(image.select(0), ndvi_vis, \"First image\")\n",
    "\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "188",
   "metadata": {},
   "outputs": [],
   "source": [
    "dates = geemap.image_dates(collection).getInfo()\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "189",
   "metadata": {},
   "outputs": [],
   "source": [
    "len(dates)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "190",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.set_plot_options(add_marker_cluster=True)\n",
    "Map.roi_reducer = ee.Reducer.mean()\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "191",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.extract_values_to_points(\"ndvi.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "192",
   "metadata": {},
   "source": [
    "## Mapping available image count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "193",
   "metadata": {},
   "outputs": [],
   "source": [
    "collection = ee.ImageCollection(\"LANDSAT/LC08/C02/T1_L2\")\n",
    "image = geemap.image_count(\n",
    "    collection, region=None, start_date=\"2021-01-01\", end_date=\"2022-01-01\", clip=False\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "194",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "vis = {\"min\": 0, \"max\": 60, \"palette\": \"coolwarm\"}\n",
    "Map.addLayer(image, vis, \"Image Count\")\n",
    "Map.add_colorbar(vis, label=\"Landsat 8 Image Count\")\n",
    "\n",
    "countries = ee.FeatureCollection(geemap.examples.get_ee_path(\"countries\"))\n",
    "style = {\"color\": \"00000088\", \"width\": 1, \"fillColor\": \"00000000\"}\n",
    "Map.addLayer(countries.style(**style), {}, \"Countries\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "195",
   "metadata": {},
   "source": [
    "## Cloud-free composites"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "196",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "collection = ee.ImageCollection(\"LANDSAT/LC08/C02/T1\").filterDate(\n",
    "    \"2021-01-01\", \"2022-01-01\"\n",
    ")\n",
    "\n",
    "composite = ee.Algorithms.Landsat.simpleComposite(collection)\n",
    "\n",
    "vis_params = {\"bands\": [\"B5\", \"B4\", \"B3\"], \"max\": 128}\n",
    "\n",
    "Map.setCenter(-122.3578, 37.7726, 10)\n",
    "Map.addLayer(composite, vis_params, \"TOA composite\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "197",
   "metadata": {},
   "outputs": [],
   "source": [
    "customComposite = ee.Algorithms.Landsat.simpleComposite(\n",
    "    **{\"collection\": collection, \"percentile\": 30, \"cloudScoreRange\": 5}\n",
    ")\n",
    "\n",
    "Map.addLayer(customComposite, vis_params, \"Custom TOA composite\")\n",
    "Map.setCenter(-105.4317, 52.5536, 11)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "198",
   "metadata": {},
   "outputs": [],
   "source": [
    "vis_params = [\n",
    "    {\"bands\": [\"B4\", \"B3\", \"B2\"], \"min\": 0, \"max\": 128},\n",
    "    {\"bands\": [\"B5\", \"B4\", \"B3\"], \"min\": 0, \"max\": 128},\n",
    "    {\"bands\": [\"B7\", \"B6\", \"B4\"], \"min\": 0, \"max\": 128},\n",
    "    {\"bands\": [\"B6\", \"B5\", \"B2\"], \"min\": 0, \"max\": 128},\n",
    "]\n",
    "\n",
    "labels = [\n",
    "    \"Natural Color (4, 3, 2)\",\n",
    "    \"Color Infrared (5, 4, 3)\",\n",
    "    \"Short-Wave Infrared (7, 6 4)\",\n",
    "    \"Agriculture (6, 5, 2)\",\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "199",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.linked_maps(\n",
    "    rows=2,\n",
    "    cols=2,\n",
    "    height=\"300px\",\n",
    "    center=[37.7726, -122.1578],\n",
    "    zoom=9,\n",
    "    ee_objects=[composite],\n",
    "    vis_params=vis_params,\n",
    "    labels=labels,\n",
    "    label_position=\"topright\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "200",
   "metadata": {},
   "source": [
    "## Exporting images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "201",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "\n",
    "image = ee.Image(\"LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318\").select(\n",
    "    [\"B5\", \"B4\", \"B3\"]\n",
    ")\n",
    "\n",
    "vis_params = {\"min\": 0, \"max\": 0.5, \"gamma\": [0.95, 1.1, 1]}\n",
    "\n",
    "Map.centerObject(image)\n",
    "Map.addLayer(image, vis_params, \"Landsat\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "202",
   "metadata": {},
   "outputs": [],
   "source": [
    "region = ee.Geometry.BBox(-122.5955, 37.5339, -122.0982, 37.8252)\n",
    "fc = ee.FeatureCollection(region)\n",
    "style = {\"color\": \"ffff00ff\", \"fillColor\": \"00000000\"}\n",
    "Map.addLayer(fc.style(**style), {}, \"ROI\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "203",
   "metadata": {},
   "source": [
    "### To local drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "204",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_image(image, filename=\"landsat.tif\", scale=30, region=region)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "205",
   "metadata": {},
   "outputs": [],
   "source": [
    "projection = image.select(0).projection().getInfo()\n",
    "projection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "206",
   "metadata": {},
   "outputs": [],
   "source": [
    "crs = projection[\"crs\"]\n",
    "crs_transform = projection[\"transform\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "207",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_image(\n",
    "    image,\n",
    "    filename=\"landsat_crs.tif\",\n",
    "    crs=crs,\n",
    "    crs_transform=crs_transform,\n",
    "    region=region,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "208",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.download_ee_image(image, filename=\"landsat_full.tif\", scale=60)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "209",
   "metadata": {},
   "outputs": [],
   "source": [
    "fishnet = geemap.fishnet(image.geometry(), rows=4, cols=4, delta=0.5)\n",
    "style = {\"color\": \"ffff00ff\", \"fillColor\": \"00000000\"}\n",
    "Map.addLayer(fishnet.style(**style), {}, \"Fishnet\")\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "210",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.download_ee_image_tiles(\n",
    "    image, fishnet, out_dir=\".\", prefix=\"landsat_\", crs=\"EPSG:3857\", scale=30\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "211",
   "metadata": {},
   "source": [
    "### To Google Drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "212",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_image_to_drive(\n",
    "    image, description=\"landsat\", folder=\"export\", region=region, scale=30\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "213",
   "metadata": {},
   "source": [
    "### To Asset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "214",
   "metadata": {},
   "outputs": [],
   "source": [
    "assetId = \"landsat_sfo\"\n",
    "geemap.ee_export_image_to_asset(\n",
    "    image, description=\"landsat\", assetId=assetId, region=region, scale=30\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "215",
   "metadata": {},
   "source": [
    "### To NumPy array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "216",
   "metadata": {},
   "outputs": [],
   "source": [
    "region = ee.Geometry.BBox(-122.5003, 37.7233, -122.3410, 37.8026)\n",
    "rgb_img = geemap.ee_to_numpy(image, region=region)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "217",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(rgb_img.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "218",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "rgb_img_test = (255 * ((rgb_img[:, :, 0:3]) + 0.2)).astype(\"uint8\")\n",
    "plt.imshow(rgb_img_test)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "219",
   "metadata": {},
   "source": [
    "## Exporting image collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "220",
   "metadata": {},
   "outputs": [],
   "source": [
    "point = ee.Geometry.Point(-99.2222, 46.7816)\n",
    "collection = (\n",
    "    ee.ImageCollection(\"USDA/NAIP/DOQQ\")\n",
    "    .filterBounds(point)\n",
    "    .filterDate(\"2008-01-01\", \"2018-01-01\")\n",
    "    .filter(ee.Filter.listContains(\"system:band_names\", \"N\"))\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "221",
   "metadata": {},
   "outputs": [],
   "source": [
    "collection.aggregate_array(\"system:index\").getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "222",
   "metadata": {},
   "source": [
    "### To local drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "223",
   "metadata": {},
   "outputs": [],
   "source": [
    "out_dir = os.path.expanduser(\"~/Downloads\")\n",
    "geemap.ee_export_image_collection(collection, out_dir=out_dir, scale=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "224",
   "metadata": {},
   "source": [
    "### To Google Drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "225",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_image_collection_to_drive(collection, folder=\"export\", scale=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "226",
   "metadata": {},
   "source": [
    "### To Assets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "227",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_image_collection_to_asset(collection)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "228",
   "metadata": {},
   "source": [
    "# Exporting feature collections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "229",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "fc = ee.FeatureCollection(\"USDOS/LSIB_SIMPLE/2017\").filter(\n",
    "    ee.Filter.eq(\"wld_rgn\", \"Europe\")\n",
    ")\n",
    "\n",
    "Map.addLayer(fc, {}, \"Europe\")\n",
    "Map.centerObject(fc, 3)\n",
    "Map"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "230",
   "metadata": {},
   "source": [
    "### To local drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "231",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_to_shp(fc, filename=\"europe.shp\", selectors=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "232",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_vector(fc, filename=\"europe2.shp\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "233",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_to_geojson(fc, filename=\"europe.geojson\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "234",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_to_csv(fc, filename=\"europe.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "235",
   "metadata": {},
   "outputs": [],
   "source": [
    "gdf = geemap.ee_to_gdf(fc)\n",
    "gdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "236",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = geemap.ee_to_df(fc)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "237",
   "metadata": {},
   "source": [
    "### To Google Drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "238",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_vector_to_drive(\n",
    "    fc, description=\"europe\", fileFormat=\"SHP\", folder=\"export\"\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "239",
   "metadata": {},
   "source": [
    "### To Asset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "240",
   "metadata": {},
   "outputs": [],
   "source": [
    "geemap.ee_export_vector_to_asset(fc, description=\"Exporting Europe\", assetId=\"europe\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "241",
   "metadata": {},
   "source": [
    "## Exporting maps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "242",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map = geemap.Map()\n",
    "image = ee.Image(\"USGS/SRTMGL1_003\")\n",
    "vis_params = {\n",
    "    \"min\": 0,\n",
    "    \"max\": 4000,\n",
    "    \"palette\": [\"006633\", \"E5FFCC\", \"662A00\", \"D8D8D8\", \"F5F5F5\"],\n",
    "}\n",
    "Map.addLayer(image, vis_params, \"SRTM DEM\", True)\n",
    "Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "243",
   "metadata": {},
   "outputs": [],
   "source": [
    "Map.to_html(\n",
    "    filename=\"mymap.html\", title=\"Earth Engine Map\", width=\"100%\", height=\"800px\"\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
